#include<bits/stdc++.h>
using namespace std;
int n,t=0;
struct Trie1
{
	int tree[20005][505],cnt;
	int exist[200005],used[200005];
	void ins(char *ch,int k)
	{
		int len=strlen(ch+1),now=0;
		for(int i=1;i<=len;i++)
		{
			int word=ch[i]-'0';
			if(!tree[now][word])tree[now][word]=++cnt;
			now=tree[now][word];
		}
		exist[now]=k;
	}
	int find(char *ch)
	{
		int len=strlen(ch+1),now=0;
		for(int i=1;i<=len;i++)
		{
			int word=ch[i]-'0';
			if(!tree[now][word])return 0;
			now=tree[now][word];
		}
		return exist[now];
	}
}trie;
int main()
{
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		char op[2005],ch[2005];
		int x=0,mh=0,po=0,k=0;
		bool f=true;
		scanf("%s",op+1);
		scanf("%s",ch+1);
		for(int i=1;i<=strlen(ch+1);i++)
		{
			if(ch[i]=='.')
			{
				po++;
				if(x>255||x<0){f=false;break;}
				x=0;k=0;
			}
			else if(ch[i]==':')
			{
				mh++;
				if(x>255||x<0){f=false;break;}
				x=0;k=0;
			}
			else
			{
				if(x==0&&k==1){f=false;break;}
				x=x*10+ch[i]-'0';k++;
			}
		}
//		printf("%d %d\n",mh,po);
		if(x>65535||x<0)f=false;
		if(!f||po!=3||mh!=1)printf("ERR\n");
		else
		if(op[1]=='S'&&!trie.find(ch))
		{
			printf("OK\n"),trie.ins(ch,i);
		}
		else if(op[1]=='C'&&trie.find(ch))
		{
			printf("%d\n",trie.find(ch));
		}
		else 
		{
			printf("FAIL\n");
		}
	}
	return 0;
}
